import Chara.SystemChara

"""
角色加载工厂
    @author LiuBoYuan
    Description
    用于加载
         不同用户的初始角色
         获取指定的角色
"""

MapperCode2Chara = {
    0: Chara.SystemChara.XiaoMai,
    1: Chara.SystemChara.C_MS,
    2: Chara.SystemChara.JiaRan,
    3: Chara.SystemChara.KaiErXi,
    4: Chara.SystemChara.FuLanDuoLu,
    5: Chara.SystemChara.Index
}

"""
MapperCode2Chara 是 角色数据注册表
一般角色写好后需要在这里进行注册
键可以是字符串 也可以是 int
"""


class CharaFactory:
    """
        Chara 人物生产角色
        该工厂获得的角色均未实例化
    """

    @staticmethod
    def get_chara_from_page(pre_page=None, page=None):
        """
        DESCRIPTION
            获取指定页面的人物角色
        @param pre_page: 每页展示的数据容器
        @param page: 展示的是第几页
        @return:
        """
        if page is None: page = 1
        if pre_page is None: pre_page = 5

        tmp_slice = slice((page - 1) * pre_page, pre_page * (page))

        list_chara = [chara for chara in list(MapperCode2Chara.values())[tmp_slice]]
        return list_chara

    @staticmethod
    def get_all_charas():
        """
        获取所有的chara
        @return:
        """
        charas = list(MapperCode2Chara.values())
        return charas

    @staticmethod
    def generate(code):
        """
        DESCRIPTION
            根据用户传入的角色代码 获取角色
        @param code: 角色的代码
        @return: 指定角色
        """
        return MapperCode2Chara.get(code)


if __name__ == '__main__':
    import tkinter as tk

    win = tk.Tk()
    chara = CharaFactory.generate(0)()
    img = chara.get_tkinter_image(rate_size=.5)
    label = tk.Label(image=img)
    label.place(x=0, y=0)
    print(chara.info)
    win.mainloop()
